package offer.day13;

public class No18Second_deleteDuplication {
    /*
     * 面试题18：删除链表的节点
     * 题目二：删除链表中重复的节点
     * 在一个排序的链表中，如何删除重复的节点？
     * 例如：1->2->2->3->3,删除重复的节点后为：1->2->3
     *
     * 思路：就是从头节点开始，两两进行比较，相等的next指针移动，并改变前一个的指向，
     *     不想等的将所有指针的只想向后移即可。直到到达链表的结尾结束。
     *
     * */
    //定义ListNode节点  静态

    public static void main(String[] args) {
        ListNode head = new ListNode(1);
        ListNode second = new ListNode(1);
        ListNode three = new ListNode(1);
        ListNode four = new ListNode(1);
        ListNode five = new ListNode(2);
        ListNode six = new ListNode(2);
        ListNode seven = new ListNode(2);
        head.next = second;
        second.next = three;
        three.next = four;
        four.next = five;
        five.next = six;
        six.next = seven;
        seven.next = null;
        showNode(head);
        deleteDuplicate(head);
        showNode(head);



    }

    public static void deleteDuplicate(ListNode head){
        if(head==null || head.next==null) return;
        ListNode preNode=head;
        ListNode curNode=head;
        ListNode nextNode=curNode.next;
        while(curNode.next!=null){
            if(curNode.data!= nextNode.data){
                preNode=curNode;
                curNode=preNode.next;
                nextNode=curNode.next;
            }else{
                if(nextNode.next!=null){
                    curNode.next=nextNode.next;
                    nextNode=curNode.next;
                }else{
                    curNode.next=null;
                }
            }
        }
    }

    public static void showNode(ListNode head){
        ListNode tmp=head;
        while(tmp!=null){
            System.out.println(tmp);
            tmp=tmp.next;
        }
        System.out.println();
    }
}

